/* eslint no-param-reassign: 0 */

import getUuid from './uuid'
import { MESSAGE_STATUS, MESSAGE_TYPE } from '../constants/messages'

export default () => {
  if (!Array.prototype.last) {
    Object.assign(Array.prototype, {
      last () {
        return this[this.length - 1]
      }
    })
  }
}

export const isEmptyObject = obj =>
  Object.keys(obj).length === 0 && obj.constructor === Object

export const isJSONValid = value => {
  try {
    JSON.parse(value)
  } catch (e) {
    return false
  }
  return true
}

export const getTypingUsersText = (users = []) => {
  const count = users.length
  if (count === 1) {
    const [user] = users
    return `${user.name} is typing`
  }

  if (count === 2) {
    const [first, second] = users
    return `${first.name} and ${second.name} are typing`
  }

  const [user] = users
  const rest = users.length - 1
  return `${user.name} and ${rest} others are typing`
}

export const createPendingMessage = data => {
  const timestamp = Math.floor(new Date().getTime() / 1000)
  const tempMessageId = getUuid()
  const { message, file } = data
  const tempAttachments = [{ id: tempMessageId }]
  const pendingMessage = {
    ...data,
    content: message || null,
    id: tempMessageId,
    echoId: tempMessageId,
    status: MESSAGE_STATUS.PROGRESS,
    createdAt: timestamp,
    messageType: MESSAGE_TYPE.OUTGOING,
    conversationId: data.conversationId,
    attachments: file ? tempAttachments : null,
    isPrivate: false
  }

  return pendingMessage
}

export const convertToSlug = text => {
  return text
    .toLowerCase()
    .replace(/[^\w ]+/g, '')
    .replace(/ +/g, '_')
}
